package com.introspy.core; import java.io.RandomAccessFile; import android.text.format.Time; public class LoadConfig { // set to true here makes it faster but won't // allows to update changes in the file a runtime private Boolean _onlyCheckOnce = false; // prevents the app for constantly opening the config file private Boolean _alreadyChecked = false; private Boolean _previousCheckValue = false; private String _configFileName = "introspy.config"; private Time _lastCheck = new Time(); private String _hookTypes = ""; private static LoadConfig _instance = null; protected LoadConfig() { } static public LoadConfig getInstance() { if (_instance == null) _instance = new LoadConfig(); return _instance; } public String getHookTypes() { return _hookTypes; } // no config file means the app won't be hooked public Boolean initConfig(String dataDir) { if (_alreadyChecked) return _previousCheckValue; Time now = new Time(); now.setToNow(); // check for modifications only every X if (_lastCheck.toMillis(true) + 3000 >= now.toMillis(true)) { return _previousCheckValue; } String path = dataDir + "/" + _configFileName; _hookTypes = readFirstLineOfFile(path); if (_onlyCheckOnce) _alreadyChecked = true; _lastCheck.setToNow(); if (_hookTypes.isEmpty()) { return (_previousCheckValue = false); } return (_previousCheckValue = true); } private String readFirstLineOfFile(String fn) { String lineData = ""; try{ RandomAccessFile inFile = new RandomAccessFile(fn, "r"); lineData = inFile.readLine(); inFile.close(); } // file not found catch(Exception e){ // Log.i("IntrospyLog", "--> "+ e); // app won't be hooked } return lineData; } }